import os

def rename_files_with_string(directory, source_string, target_string):
    """
    遍历目录下所有文件和子目录，将文件名中包含source_string的替换为target_string

    Args:
        directory: 要遍历的目录路径
        source_string: 要替换的源字符串
        target_string: 替换后的目标字符串
    """
    renamed_count = 0

    # 使用os.walk遍历目录树
    for root, dirs, files in os.walk(directory):
        # 遍历所有文件
        for filename in files:
            # 检查文件名是否包含源字符串
            if source_string in filename:
                # 构造新的文件名
                new_filename = filename.replace(source_string, target_string)

                # 获取完整的文件路径
                old_filepath = os.path.join(root, filename)
                new_filepath = os.path.join(root, new_filename)

                # 重命名文件
                try:
                    os.rename(old_filepath, new_filepath)
                    print(f"已重命名: {old_filepath} -> {new_filepath}")
                    renamed_count += 1
                except Exception as e:
                    print(f"重命名失败: {old_filepath} 错误: {e}")

        # 遍历所有目录（处理目录名中包含指定字符串的情况）
        for dirname in dirs:
            if source_string in dirname:
                # 构造新的目录名
                new_dirname = dirname.replace(source_string, target_string)

                # 获取完整的目录路径
                old_dirpath = os.path.join(root, dirname)
                new_dirpath = os.path.join(root, new_dirname)

                # 重命名目录
                try:
                    os.rename(old_dirpath, new_dirpath)
                    print(f"已重命名目录: {old_dirpath} -> {new_dirpath}")
                    renamed_count += 1
                except Exception as e:
                    print(f"重命名目录失败: {old_dirpath} 错误: {e}")

    print(f"\n总共重命名了 {renamed_count} 个文件/目录")

def main():
    """
    主函数，获取用户输入并执行重命名操作
    """
    # 获取用户输入
    source_string = input("请输入要替换的源字符串: ")
    target_string = input("请输入目标字符串: ")

    # 获取当前目录
    current_directory = "."

    # 确认操作
    print(f"\n将在目录 '{current_directory}' 中查找包含 '{source_string}' 的文件/目录名，并替换为 '{target_string}'")
    confirm = input("确认执行吗？(y/n): ")

    if confirm.lower() in ['y', 'yes']:
        rename_files_with_string(current_directory, source_string, target_string)
        print("操作完成！")
    else:
        print("操作已取消。")

if __name__ == "__main__":
    main()
